﻿Imports System.Data.OleDb
''' <summary>
''' Fichero que contiene la clase BaseDatos para manejar
''' la conexión con la base de datos.
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>
''' 
Public Class BaseDatos
    Private _Conexion As OleDbConnection
    Private _sql As OleDbCommand
    Private _Lector As OleDbDataReader
    Private _StrConexion As String 'cadena de conexión

    Public Sub New()
        Me._StrConexion = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
            "Data Source=..\..\Campeonatos.accdb;"
        Me._Conexion = New OleDbConnection(_StrConexion)
    End Sub

    Public Sub Open()
        Me._Conexion.Open()
    End Sub

    Public Sub Close()
        If (Not _Conexion Is Nothing) Then
            Me._Conexion.Close()
        End If
    End Sub

    ''' <summary>
    ''' Función que recibe las sql para insertar, modificar o borrar en la base de datos.
    ''' </summary>
    ''' <param name="sqlInsercion"></param>
    ''' <returns>Entero con la cantidad de elementos insertados</returns>
    ''' <remarks></remarks>
    Public Function InsertarModificarBorrar(ByVal sqlInsercion As String) As Integer
        Dim FilasManipuladas As Integer = 0
        Try
            Me._sql = New OleDbCommand(sqlInsercion, _Conexion)
            Me.Open()
            FilasManipuladas = _sql.ExecuteNonQuery()
        Catch ex As Exception
            'Debug.WriteLine("Error: " + ex.Message)
            Throw ex
        Finally
            Me.Close()
        End Try
        Return FilasManipuladas
    End Function

    ''' <summary>
    ''' Función que recibe las sql para realizar consultas.
    ''' </summary>
    ''' <param name="sqlConsulta"></param>
    ''' <param name="tabla"></param>
    ''' <returns>Lista de String con la select</returns>
    ''' <remarks></remarks>
    Public Function Consultar(ByVal sqlConsulta As String, ByVal tabla As String) As List(Of String)
        Dim consulta = New List(Of String)
        Dim fila As String = ""
        Dim visible As Integer = 0
        Try
            Me._sql = New OleDbCommand(sqlConsulta, _Conexion)
            Me.Open()
            Me._Lector = _sql.ExecuteReader()

            If tabla = "Jugadores" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("NIF")) & "-" & CStr(Me._Lector("Nombre")) _
                        & "-" & CStr(Me._Lector("Apellidos")) & "-" & CStr(Me._Lector("FechaNacimiento")) _
                        & "-" & CStr(Me._Lector("Calle")) & "-" & CStr(Me._Lector("Numero")) & "-" & CStr(Me._Lector("Puerta")) _
                        & "-" & CStr(Me._Lector("Localidad")) & "-" & CStr(Me._Lector("Provincia")) & "-" & _
                        CStr(Me._Lector("CorreoElectronico")) & "-" & CStr(Me._Lector("Whatsapp")) & "-" & _
                        CStr(Me._Lector("Facebook")) & "-" & CStr(Me._Lector("Twitter")) & "-" & CStr(Me._Lector("Accesible")) _
                        & "-" & CStr(Me._Lector("Id"))
                    If CInt(Me._Lector("Accesible")) = -1 Then 'si accesible es SÍ lo añado a la lista
                        consulta.Add(fila)
                    End If
                    fila = ""
                End While
            ElseIf tabla = "Equipos" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("NombreEquipo")) & "-" & CStr(Me._Lector("IdJugadorCapitan")) _
                        & "-" & CStr(Me._Lector("IdJugadorNormal")) & "-" & CStr(Me._Lector("Accesible")) _
                        & "-" & CStr(Me._Lector("Id"))
                    If CInt(Me._Lector("Accesible")) = -1 Then 'si accesible es SÍ lo añado a la lista
                        consulta.Add(fila)
                    End If
                    fila = ""
                End While
            ElseIf tabla = "Usuarios" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("NIF")) & "-" & CStr(Me._Lector("Nombre")) _
                        & "-" & CStr(Me._Lector("Apellidos")) & "-" & CStr(Me._Lector("Telefono")) _
                        & "-" & CStr(Me._Lector("Usuario")) & "-" & CStr(Me._Lector("Contraseña")) & "-" & CStr(Me._Lector("IdRol")) _
                        & "-" & CStr(Me._Lector("Accesible")) & "-" & CStr(Me._Lector("Id"))
                    If CInt(Me._Lector("Accesible")) = -1 Then 'si accesible es SÍ lo añado a la lista
                        consulta.Add(fila)
                    End If
                    fila = ""
                End While
            ElseIf tabla = "Roles" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("Nombre")) & "-" & CStr(Me._Lector("Id"))
                    consulta.Add(fila)
                    fila = ""
                End While
            ElseIf tabla = "Formado" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("IdEquipo")) & "-" & CStr(Me._Lector("IdJugador"))
                    consulta.Add(fila)
                    fila = ""
                End While
            ElseIf tabla = "Permisos" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("Nombre")) & "-" & CStr(Me._Lector("Id"))
                    consulta.Add(fila)
                    fila = ""
                End While
            ElseIf tabla = "Tener" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("IdRol")) & "-" & CStr(Me._Lector("IdPermiso")) & "-" & CStr(Me._Lector("Accesible"))
                    consulta.Add(fila)
                    fila = ""
                End While
            ElseIf tabla = "Torneos" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("Id")) & "-" & CStr(Me._Lector("Nombre")) _
                        & "-" & CStr(Me._Lector("Tipo")) & "-" & CStr(Me._Lector("FechaInicioInscripcion")) _
                        & "-" & CStr(Me._Lector("FechaFinInscripcion")) _
                        & "-" & CStr(Me._Lector("FechaFinTorneo")) & "-" & CStr(Me._Lector("NRondas"))
                    If CInt(Me._Lector("Accesible")) = -1 Then 'si accesible es SÍ lo añado a la lista
                        consulta.Add(fila)
                    End If
                    fila = ""
                End While
            ElseIf tabla = "Participar" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("IdEquipo"))
                    consulta.Add(fila)
                    fila = ""
                End While
            ElseIf tabla = "Partidos" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("Id")) & "&" & CStr(Me._Lector("IdTorneo")) _
                        & "&" & CStr(Me._Lector("IdEquipo")) _
                        & "&" & CStr(Me._Lector("Set1")) _
                        & "&" & CStr(Me._Lector("Set2")) & "&" & CStr(Me._Lector("Set3"))
                    consulta.Add(fila)
                    fila = ""
                End While
            ElseIf tabla = "TemporalClasificacion" Then
                While Me._Lector.Read() 'siguiente registro
                    fila &= CStr(Me._Lector("Id")) & "&" & CStr(Me._Lector("IdTorneo")) & "&" & CStr(Me._Lector("IdEquipo")) _
                        & "&" & CStr(Me._Lector("NombreEquipo")) _
                        & "&" & CStr(Me._Lector("SetGanados")) _
                        & "&" & CStr(Me._Lector("SetPerdidos")) & "&" & CStr(Me._Lector("TotalPuntos"))
                    consulta.Add(fila)
                    fila = ""
                End While
            End If

        Catch ex As Exception
            Throw ex
        Finally
            Me.Close()
        End Try
        Return consulta
    End Function

    Public Function MaxIdPartido() As Integer
        Dim consulta = New List(Of String)
        Dim salida As Integer = 0
        Try
            Me._sql = New OleDbCommand("Select MAX(Id) from Partidos;", _Conexion)
            Me.Open()
            Me._Lector = _sql.ExecuteReader()
            If Me._Lector.Read = False Then
                salida = 0
            Else
                While Me._Lector.Read()
                    salida = CInt(Me._Lector(0))
                End While
            End If
        Catch ex As Exception
            Throw ex
            salida = 0
        Finally
            Me.Close()
        End Try
        Return salida
    End Function

End Class
